
#region Using Statements

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using HumanElement.Xna.Construct;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Audio;
    using Microsoft.Xna.Framework.Content;
    using Microsoft.Xna.Framework.GamerServices;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Media;
    using Microsoft.Xna.Framework.Net;
    using Microsoft.Xna.Framework.Storage;

#endregion

namespace HumanElement.Xna.Framework
{
    /// <summary>
    ///     public interface IIndexable<T>
    ///        where T : [struct]
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public interface IIndexable<T>
        where T : struct
    {
        /// <summary>
        /// Gets the index.
        /// </summary>
        /// <value>The index.</value>
        T Index { get; }

        /// <summary>
        /// Gets the items.
        /// </summary>
        /// <value>The items.</value>
        IIndexable<T>[] Items { get; }
    }

    public interface IName
    {
        /// <summary>
        /// Gets or sets the name.
        /// </summary>
        /// <value>The name.</value>
        string Name { get; set; }
    }

    public interface IArtifact : IName, IIndexable<float>
    {
        
    }

    public interface IEntity
    {
       
    }

    public interface IFactory :  IGameService
    {
        
    }

    public interface IFactory<T> : IFactory
        where T:IEntity
    {
        /// <summary>
        /// Gets this instance.
        /// </summary>
        /// <returns></returns>
        T Get();
    }

    public abstract class Factory<T> where T:IEntity
    {

    }    
}
